package com.fantastic.matrix;

/**
 * @author : fantastic
 * @date : 2024/7/3 16:53
 * @desc : this class for xxxxx
 **/
public class Solution {

    /*************************************************240. 搜索二维矩阵 II**********************************************/

    /**
     * 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性：
     * 每行的元素从左到右升序排列。
     * 每列的元素从上到下升序排列。
     * @param matrix
     * @param target
     * @return
     */
    public static boolean searchMatrix(int[][] matrix, int target) {
        for (int[] ints : matrix) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (ints[j] == target) {
                    return true;
                }
            }
        }
        return false;
    }

    public static boolean searchMatrix2(int[][] matrix, int target) {
        for (int[] ints : matrix) {
            int index = searchMatrixMid(ints, target);
            if (index>=0){
                return true;
            }
        }
        return false;
    }

    public static int searchMatrixMid(int[] nums,int target){
        int low=0,high=nums.length-1;
        while (low<=high){
            int mid=(high-low)/2+low;
            int num=nums[mid];
            if (num==target){
                return mid;
            }else if (num<target){
                low=mid+1;
            }else {
                high=mid-1;
            }
        }
        return -1;
    }


    public static boolean searchMatrix3(int[][] matrix, int target) {
        int m = matrix.length;
        int n=matrix[0].length;
        int row=0,col=n-1;
        while (row<m && col>=0){
            if (matrix[row][col]==target){
                return true;
            }else if (matrix[row][col]>target){
                col--;
            }else {
                row++;
            }
        }
        return false;
    }

}
